gdk/directfb: gdkdnd-directfb's private data is used uninitialized
authorAndré Draszik <gtk@andred.net>
Sun, 13 Sep 2009 13:08:21 +0000 (14:08 +0100)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 4 Apr 2010 00:56:07 +0000 (20:56 -0400)
Use G_TYPE_INSTANCE_GET_PRIVATE() instead

In the process, convert to using G_DEFINE_TYPE, too.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=609195

Signed-off-by: Javier Jardón <jjardon@gnome.org>
gdk/directfb/gdkdnd-directfb.c

index a106de818c875435bffe56396166766a17f3022f..35624c7af5213acb04cefde7c93559746b7e48ba 100644 (file)
@@ -66,25 +66,41 @@ struct _GdkDragContextPrivate
 static GList          *contexts          = NULL;
 static GdkDragContext *current_dest_drag = NULL;
 
-#define GDK_DRAG_CONTEXT_PRIVATE_DATA(ctx) ((GdkDragContextPrivate *) GDK_DRAG_CONTEXT (ctx)->windowing_data)
 
+#define GDK_DRAG_CONTEXT_PRIVATE_DATA(ctx) ((GdkDragContextPrivate *) GDK_DRAG_CONTEXT (ctx)->windowing_data)
 
-static gpointer  parent_class = NULL;
+static void gdk_drag_context_finalize (GObject *object);
 
+G_DEFINE_TYPE (GdkDragContext, gdk_drag_context, G_TYPE_OBJECT)
 
 static void
 gdk_drag_context_init (GdkDragContext *dragcontext)
 {
-  dragcontext->windowing_data = g_new (GdkDragContextPrivate, 1);
+  GdkDragContextPrivate *private;
+
+  private = G_TYPE_INSTANCE_GET_PRIVATE (dragcontext,
+                                         GDK_TYPE_DRAG_CONTEXT,
+                                         GdkDragContextPrivate);
+
+  dragcontext->windowing_data = private;
 
   contexts = g_list_prepend (contexts, dragcontext);
 }
 
+static void
+gdk_drag_context_class_init (GdkDragContextClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = gdk_drag_context_finalize;
+
+  g_type_class_add_private (object_class, sizeof (GdkDragContextPrivate));
+}
+
 static void
 gdk_drag_context_finalize (GObject *object)
 {
-  GdkDragContext        *context = GDK_DRAG_CONTEXT (object);
-  GdkDragContextPrivate *private = GDK_DRAG_CONTEXT_PRIVATE_DATA (object);
+  GdkDragContext *context = GDK_DRAG_CONTEXT (object);
 
   g_list_free (context->targets);
 
@@ -94,60 +110,15 @@ gdk_drag_context_finalize (GObject *object)
   if (context->dest_window)
     g_object_unref (context->dest_window);
 
-
-  if (private)
-    {
-      g_free (private);
-      context->windowing_data = NULL;
-    }
-
   contexts = g_list_remove (contexts, context);
 
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gdk_drag_context_class_init (GdkDragContextClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_drag_context_finalize;
-}
-
-GType
-gdk_drag_context_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      const GTypeInfo object_info =
-      {
-        sizeof (GdkDragContextClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_drag_context_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkDragContext),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) gdk_drag_context_init,
-      };
-
-      object_type = g_type_register_static (G_TYPE_OBJECT,
-                                            "GdkDragContext",
-                                            &object_info, 0);
-    }
-
-  return object_type;
+  G_OBJECT_CLASS (gdk_drag_context_parent_class)->finalize (object);
 }
 
 GdkDragContext *
 gdk_drag_context_new (void)
 {
-  return (GdkDragContext *) g_object_new (gdk_drag_context_get_type (), NULL);
+  return g_object_new (gdk_drag_context_get_type (), NULL);
 }
 
 void
@@ -243,11 +214,9 @@ local_send_enter (GdkDragContext *context,
   new_context->protocol  = GDK_DRAG_PROTO_LOCAL;
   new_context->is_source = FALSE;
 
-  new_context->source_window = context->source_window;
-  g_object_ref (new_context->source_window);
+  new_context->source_window = g_object_ref (context->source_window);
 
-  new_context->dest_window   = context->dest_window;
-  g_object_ref (new_context->dest_window);
+  new_context->dest_window   = g_object_ref (context->dest_window);
 
   new_context->targets = g_list_copy (context->targets);
 
@@ -459,8 +428,7 @@ gdk_drag_motion (GdkDragContext  *context,
       /* Check if new destination accepts drags, and which protocol */
       if (dest_window)
        {
-         context->dest_window = dest_window;
-         g_object_ref (context->dest_window);
+         context->dest_window = g_object_ref (dest_window);
          context->protocol = protocol;
 
          switch (protocol)